Software reusability has been a much sought after goal. Rather than having to create software to perform similar operations in different projects, it would be desirable to allow the use of various pieces of a software application in other software applications. Object-oriented systems allow reuse of certain software components because interdependency among those components is reduced. Software objects may be created and tested as independent units. The ability to reuse software components allows programmers to deal with problems on a higher level of abstraction. Various environments and toolkits can be used to address lower level details.
Because software objects, if properly defined, can be easily shared by diverse software applications, software developers have created toolkits and environments to handle low-level details such as printing, interaction with an operating system, interaction with a computer network, display of information on a computer monitor, and communications with other systems using various types of communications links. Freed from these lower level details, developers of object-oriented systems may concentrate on the particular software features desired by the end-user of the software.
To facilitate reuse of software objects, an object framework will often include an object modeling tool to allow a user to specify instance variables and methods for various objects and the relationship between various objects. The object modeling tool captures a user's object model and often will interface with a code generation tool. Generated code will address the lower level details of services provided by the framework based upon the user's object model. After such code generation, the application developer will need to write the code for the methods unique to the developer's application.
When the application developer later changes the object model, however, existing code generators may have difficulty in handling such changes as the code generation process may end up overwriting the code that was previously written for the various application-specific methods. What is needed is a method to preserve the methods that have been developed by the application developer while allowing easy regeneration of code in response to changes in the application developer's object model or to changes in the framework itself.